package czy.demo.controller.page;

import czy.demo.pojo.Person;
import czy.demo.repository.PersonRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * 测试分页与排序的Controller
 */
@RestController
@RequestMapping("/person")
public class PagingAndSortingController {

    @Autowired
    private PersonRepository personRepository;

    /* 根据指定字段排序，获取所有数据 */
    @GetMapping("/all/{sort}")
    public List<Person> getAllPersonWithSort(@PathVariable String sort){
        return this.personRepository.findAll(Sort.by(sort));
    }

    /**
     * 分页获取数据，返回Page对象
     * @param page：页码，从0开始！！！
     * @param size：页大小
     * @return：Page对象，包含了列表数据，总条数，总页数，偏移，页码等
     */
    @GetMapping("/all/{page}/{size}")
    public Page<Person> getAllPersonWithPagination(@PathVariable Integer page, @PathVariable Integer size){
        /* 只有页码、页大小的分页，采用默认排序，即id排序 */
        return this.personRepository.findAll(PageRequest.of(page,size));
    }

    /* 根据指定字段排序的分页 */
    @GetMapping("/all/{page}/{size}/{sort}")
    public Page<Person> getAllPersonWithPagination(@PathVariable Integer page, @PathVariable Integer size,@PathVariable String sort){
        /* 只有页码、页大小的分页，采用默认排序，即id排序 */
        return this.personRepository.findAll(PageRequest.of(page,size,Sort.by(sort)));
    }
}
